package org.Yiran.timetale_re.item.rune.base;

import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;

/**
 * 符文管理器类
 * <p>
 * 该类提供了统一的符文管理接口，负责处理不同类型符文的功能调用和持续效果处理。
 * 作为符文系统的核心管理组件，它连接了符文物品和符文能力实现。
 * </p>
 */
public class RuneManager {

    // ==============================
    // 符文使用方法
    // ==============================

    /**
     * 使用符文的统一接口方法
     * <p>
     * 此方法提供了一个标准的符文使用入口，根据符文物品堆中的符文类型，
     * 调用对应的符文能力实现的onUse方法来执行符文效果。
     * </p>
     *
     * @param stack  符文物品堆，包含具体符文信息的物品实例
     * @param level  当前世界对象，提供游戏环境上下文
     * @param player 使用符文的玩家对象
     */
    public static void useRune(ItemStack stack, Level level, Player player) {
        // 验证物品是否为有效的符文物品
        if (!stack.getItem().equals(RuneItem.getRuneItem())) {
            return;
        }

        // 获取符文类型并查找对应的符文能力实现
        String runeType = RuneItem.getRuneType(stack);
        RuneAbility ability = RuneRegistry.getRuneAbility(runeType);

        // 如果找到对应的符文能力实现，则调用其使用方法
        if (ability != null) {
            ability.onUse(stack, level, player);
        }
    }

    // ==============================
    // 符文持续效果方法
    // ==============================

    /**
     * 符文的持续效果处理方法
     * <p>
     * 此方法用于处理符文的持续性效果，例如被动技能或周期性效果。
     * 它会根据符文物品堆中的符文类型，调用对应的符文能力实现的onTick方法。
     * 通常在游戏刻更新时被调用以维持符文效果。
     * </p>
     *
     * @param stack  符文物品堆，包含具体符文信息的物品实例
     * @param level  当前世界对象，提供游戏环境上下文
     * @param player 持有符文的玩家对象
     */
    public static void onRuneTick(ItemStack stack, Level level, Player player) {
        // 验证物品是否为有效的符文物品
        if (!stack.getItem().equals(RuneItem.getRuneItem())) {
            return;
        }

        // 获取符文类型并查找对应的符文能力实现
        String runeType = RuneItem.getRuneType(stack);
        RuneAbility ability = RuneRegistry.getRuneAbility(runeType);

        // 如果找到对应的符文能力实现，则调用其持续效果方法
        if (ability != null) {
            ability.onTick(stack, level, player);
        }
    }
}